home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / gfx / misc / gnuplot-3.7src.lha / gnuplot-3.7src / gnuplot-3.7.lha / gnuplot-3.7 / term / qms.trm < prev    next >
Text File  |  1998-11-26  |  6KB  |  236 lines

  1. /*
  2.  * $Id: qms.trm,v 1.14 1998/04/14 00:18:05 drd Exp $
  3.  *
  4.  */
  5.  
  6. /* GNUPLOT - qms.trm */
  7.  
  8. /*[
  9.  * Copyright 1990 - 1993, 1998
  10.  *
  11.  * Permission to use, copy, and distribute this software and its
  12.  * documentation for any purpose with or without fee is hereby granted,
  13.  * provided that the above copyright notice appear in all copies and
  14.  * that both that copyright notice and this permission notice appear
  15.  * in supporting documentation.
  16.  *
  17.  * Permission to modify the software is granted, but not the right to
  18.  * distribute the complete modified source code.  Modifications are to
  19.  * be distributed as patches to the released version.  Permission to
  20.  * distribute binaries produced by compiling modified sources is granted,
  21.  * provided you
  22.  *   1. distribute the corresponding source modifications from the
  23.  *    released version in the form of a patch file along with the binaries,
  24.  *   2. add special version identification to distinguish your version
  25.  *    in addition to the base release version number,
  26.  *   3. provide your name and address as the primary contact for the
  27.  *    support of your modified version, and
  28.  *   4. retain our contact information in regard to use of the base
  29.  *    software.
  30.  * Permission to distribute the released version of the source code along
  31.  * with corresponding source modifications in the form of a patch file is
  32.  * granted with same provisions 2 through 4 for binary distributions.
  33.  *
  34.  * This software is provided "as is" without express or implied warranty
  35.  * to the extent permitted by applicable law.
  36. ]*/
  37.  
  38. /*
  39.  * This file is included by ../term.c.
  40.  *
  41.  * This terminal driver supports:
  42.  *  QMS laser printers
  43.  *
  44.  * AUTHORS
  45.  *  Colin Kelley, Thomas Williams, Russell Lang
  46.  * 
  47.  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
  48.  * 
  49.  */
  50.  
  51. /*
  52.  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
  53.  */
  54.  
  55. #include "driver.h"
  56.  
  57. #ifdef TERM_REGISTER
  58. register_term(qms)
  59. #endif
  60.  
  61. #ifdef TERM_PROTO
  62. TERM_PUBLIC void QMS_init __PROTO((void));
  63. TERM_PUBLIC void QMS_graphics __PROTO((void));
  64. TERM_PUBLIC void QMS_text __PROTO((void));
  65. TERM_PUBLIC void QMS_linetype __PROTO((int linetype));
  66. TERM_PUBLIC void QMS_move __PROTO((unsigned int x, unsigned int y));
  67. TERM_PUBLIC void QMS_vector __PROTO((unsigned int x2, unsigned int y2));
  68. TERM_PUBLIC void QMS_put_text __PROTO((unsigned int x, unsigned int y, char str[]));
  69. TERM_PUBLIC void QMS_reset __PROTO((void));
  70.  
  71. #define QMS_XMAX 9000
  72. #define QMS_YMAX 6000
  73.  
  74. #define QMS_XLAST (QMS_XMAX - 1)
  75. #define QMS_YLAST (QMS_YMAX - 1)
  76.  
  77. #define QMS_VCHAR        120
  78. #define QMS_HCHAR        70
  79. #define QMS_VTIC        70
  80. #define QMS_HTIC        70
  81. #endif /* TERM_PROTO */
  82.  
  83. #ifndef TERM_PROTO_ONLY
  84. #ifdef TERM_BODY
  85. static int qms_line = 0;    /* to remember current line type */
  86.  
  87. TERM_PUBLIC void QMS_init()
  88. {
  89.     /* This was just ^IOL, but at Rutgers at least we need some more stuff */
  90.     fputs("^PY^-\n^IOL\n^ISYNTAX00000^F^IB11000^IJ00000^IT00000\n", gpoutfile);
  91.     /*     ^ QUIC on    ^set defaults  ^ set botttom,top,left margins
  92.      *            ^landscape         ^free format
  93.      */
  94.  
  95. /* set defaults are: implicit decimal point, units in inches, 
  96.  * numbers left justified, units in 1/1000 inch, do not ignore spaces
  97.  * margins are in 1/1000 inch units
  98.  */
  99. }
  100.  
  101.  
  102. TERM_PUBLIC void QMS_graphics()
  103. {
  104.     fputs("^IGV\n", gpoutfile);
  105.     /*     ^enter graphics vector mode */
  106. }
  107.  
  108.  
  109.  
  110. TERM_PUBLIC void QMS_text()
  111. {
  112. /* added ^-, because ^, after an ^I command doesn't actually print a page */
  113. /* Did anybody try this code out?  [uhh...-cdk] */
  114.     fputs("^IGE\n^-^,", gpoutfile);
  115.     /*     ^exit graphics vector mode
  116.      *           ^pass terminator
  117.      *             ^print page
  118.      */
  119. }
  120.  
  121.  
  122. TERM_PUBLIC void QMS_linetype(linetype)
  123. int linetype;
  124. {
  125.     static int width[2 + 9] = { 7, 3, 3, 3, 3, 5, 5, 5, 7, 7, 7 };
  126.     static int type[2 + 9] = { 0, 1, 0, 2, 3, 0, 2, 3, 0, 2, 3 };
  127. /*
  128.  * I don't know about Villanova, but on our printer, using ^V without
  129.  * previously setting up a pattern crashes the microcode.
  130.  * [nope, doesn't crash here. -cdk]
  131.  * [it generates a controller error here on dotted lines. - rjl]
  132.  */
  133. /* Code to define patterns added by rjl
  134.  * According to the manual it should work - but it doesn't
  135.  */
  136.     qms_line = linetype;
  137.     if (linetype >= 9)
  138.     linetype %= 9;
  139.  
  140.     fprintf(gpoutfile, "^PW%02d\n", width[linetype + 2]);
  141. /*                     ^width in dots */
  142.  
  143.     switch (type[linetype + 2]) {
  144.     case 1:            /* short dash */
  145.     fputs("^PV102025^G\n^V1\n", gpoutfile);
  146.     /* ^PV = define pattern vector, 1 = pattern number,
  147.      * 02 = number of pen downs and ups, 025 = .025" length of ups/downs
  148.      */
  149.     break;
  150.     case 2:            /* medium dash */
  151.     fputs("^PV202050^G\n^V2\n", gpoutfile);
  152.     break;
  153.     case 3:            /* long dash */
  154.     fputs("^PV302100^G\n^V3\n", gpoutfile);
  155.     break;
  156.     default:
  157.     case 0:
  158.     fputs("^V0\n", gpoutfile);
  159.     break;
  160.     }
  161. }
  162.  
  163.  
  164. TERM_PUBLIC void QMS_move(x, y)
  165. unsigned int x, y;
  166. {
  167.     fprintf(gpoutfile, "^U%05d:%05d\n", 1000 + x, QMS_YLAST + 1000 - y);
  168.     /*                   ^pen up vector*/
  169. }
  170.  
  171.  
  172. TERM_PUBLIC void QMS_vector(x2, y2)
  173. unsigned int x2, y2;
  174. {
  175.     fprintf(gpoutfile, "^D%05d:%05d\n", 1000 + x2, QMS_YLAST + 1000 - y2);
  176.     /*                  ^pen down vector*/
  177. }
  178.  
  179.  
  180. TERM_PUBLIC void QMS_put_text(x, y, str)
  181. unsigned int x, y;
  182. char str[];
  183. {
  184.     char ch;
  185.     QMS_move(x, y + QMS_VCHAR / 3);
  186.     fputs("^IGE\n", gpoutfile);
  187.     ch = *str++;
  188.     while (ch != NUL) {
  189.     if (ch == '^')
  190.         putc('^', gpoutfile);
  191.     putc(ch, gpoutfile);
  192.     ch = *str++;
  193.     }
  194.     fputs("\n^IGV\n", gpoutfile);
  195.     QMS_linetype(qms_line);    /* restore line type */
  196. }
  197.  
  198.  
  199. TERM_PUBLIC void QMS_reset()
  200. {
  201.     fputs("^PN^-\n", gpoutfile);
  202.     /*     ^QUIC off */
  203. }
  204.  
  205. #endif /* TERM_BODY */
  206.  
  207. #ifdef TERM_TABLE
  208. TERM_TABLE_START(qms_driver)
  209.     "qms", "QMS/QUIC Laser printer (also Talaris 1200 and others)",
  210.     QMS_XMAX, QMS_YMAX, QMS_VCHAR, QMS_HCHAR,
  211.     QMS_VTIC, QMS_HTIC, options_null, QMS_init, QMS_reset,
  212.     QMS_text, null_scale, QMS_graphics, QMS_move, QMS_vector,
  213.     QMS_linetype, QMS_put_text, null_text_angle,
  214.     null_justify_text, line_and_point, do_arrow, set_font_null
  215. TERM_TABLE_END(qms_driver)
  216.  
  217. #undef LAST_TERM
  218. #define LAST_TERM qms_driver
  219.  
  220. #endif /* TERM_TABLE */
  221. #endif /* TERM_PROTO_ONLY */
  222.  
  223. #ifdef TERM_HELP
  224. START_HELP(qms)
  225. "1 qms",
  226. "?commands set terminal qms",
  227. "?set terminal qms",
  228. "?set term qms",
  229. "?terminal qms",
  230. "?term qms",
  231. "?qms",
  232. " The `qms` terminal driver supports the QMS/QUIC Laser printer, the Talaris",
  233. " 1200 and others.  It has no options."
  234. END_HELP(qms)
  235. #endif
  236.